home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / include / bits / stdlib.h < prev    next >
C/C++ Source or Header  |  2008-09-29  |  6KB  |  157 lines

  1. /* Checking macros for stdlib functions.
  2.    Copyright (C) 2005, 2007 Free Software Foundation, Inc.
  3.    This file is part of the GNU C Library.
  4.  
  5.    The GNU C Library is free software; you can redistribute it and/or
  6.    modify it under the terms of the GNU Lesser General Public
  7.    License as published by the Free Software Foundation; either
  8.    version 2.1 of the License, or (at your option) any later version.
  9.  
  10.    The GNU C Library is distributed in the hope that it will be useful,
  11.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13.    Lesser General Public License for more details.
  14.  
  15.    You should have received a copy of the GNU Lesser General Public
  16.    License along with the GNU C Library; if not, write to the Free
  17.    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
  18.    02111-1307 USA.  */
  19.  
  20. #ifndef _STDLIB_H
  21. # error "Never include <bits/stdlib.h> directly; use <stdlib.h> instead."
  22. #endif
  23.  
  24. extern char *__realpath_chk (__const char *__restrict __name,
  25.                  char *__restrict __resolved,
  26.                  size_t __resolvedlen) __THROW __wur;
  27. extern char *__REDIRECT_NTH (__realpath_alias,
  28.                  (__const char *__restrict __name,
  29.                   char *__restrict __resolved), realpath) __wur;
  30. extern char *__REDIRECT_NTH (__realpath_chk_warn,
  31.                  (__const char *__restrict __name,
  32.                   char *__restrict __resolved,
  33.                   size_t __resolvedlen), __realpath_chk) __wur
  34.      __warnattr ("second argument of realpath must be either NULL or at "
  35.          "least PATH_MAX bytes long buffer");
  36.  
  37. __extern_always_inline __wur char *
  38. __NTH (realpath (__const char *__restrict __name, char *__restrict __resolved))
  39. {
  40.   if (__bos (__resolved) != (size_t) -1)
  41.     {
  42. #if defined _LIBC_LIMITS_H_ && defined PATH_MAX
  43.       if (__bos (__resolved) < PATH_MAX)
  44.     return __realpath_chk_warn (__name, __resolved, __bos (__resolved));
  45. #endif
  46.       return __realpath_chk (__name, __resolved, __bos (__resolved));
  47.     }
  48.  
  49.   return __realpath_alias (__name, __resolved);
  50. }
  51.  
  52.  
  53. extern int __ptsname_r_chk (int __fd, char *__buf, size_t __buflen,
  54.                 size_t __nreal) __THROW __nonnull ((2));
  55. extern int __REDIRECT_NTH (__ptsname_r_alias, (int __fd, char *__buf,
  56.                            size_t __buflen), ptsname_r)
  57.      __nonnull ((2));
  58. extern int __REDIRECT_NTH (__ptsname_r_chk_warn,
  59.                (int __fd, char *__buf, size_t __buflen,
  60.                 size_t __nreal), __ptsname_r_chk)
  61.      __nonnull ((2)) __warnattr ("ptsname_r called with buflen bigger than "
  62.                  "size of buf");
  63.  
  64. __extern_always_inline int
  65. __NTH (ptsname_r (int __fd, char *__buf, size_t __buflen))
  66. {
  67.   if (__bos (__buf) != (size_t) -1)
  68.     {
  69.       if (!__builtin_constant_p (__buflen))
  70.     return __ptsname_r_chk (__fd, __buf, __buflen, __bos (__buf));
  71.       if (__buflen > __bos (__buf))
  72.     return __ptsname_r_chk_warn (__fd, __buf, __buflen, __bos (__buf));
  73.     }
  74.   return __ptsname_r_alias (__fd, __buf, __buflen);
  75. }
  76.  
  77.  
  78. extern int __wctomb_chk (char *__s, wchar_t __wchar, size_t __buflen)
  79.   __THROW __wur;
  80. extern int __REDIRECT_NTH (__wctomb_alias, (char *__s, wchar_t __wchar),
  81.                wctomb) __wur;
  82.  
  83. __extern_always_inline __wur int
  84. __NTH (wctomb (char *__s, wchar_t __wchar))
  85. {
  86.   /* We would have to include <limits.h> to get a definition of MB_LEN_MAX.
  87.      But this would only disturb the namespace.  So we define our own
  88.      version here.  */
  89. #define __STDLIB_MB_LEN_MAX    16
  90. #if defined MB_LEN_MAX && MB_LEN_MAX != __STDLIB_MB_LEN_MAX
  91. # error "Assumed value of MB_LEN_MAX wrong"
  92. #endif
  93.   if (__bos (__s) != (size_t) -1 && __STDLIB_MB_LEN_MAX > __bos (__s))
  94.     return __wctomb_chk (__s, __wchar, __bos (__s));
  95.   return __wctomb_alias (__s, __wchar);
  96. }
  97.  
  98.  
  99. extern size_t __mbstowcs_chk (wchar_t *__restrict __dst,
  100.                   __const char *__restrict __src,
  101.                   size_t __len, size_t __dstlen) __THROW;
  102. extern size_t __REDIRECT_NTH (__mbstowcs_alias,
  103.                   (wchar_t *__restrict __dst,
  104.                    __const char *__restrict __src,
  105.                    size_t __len), mbstowcs);
  106. extern size_t __REDIRECT_NTH (__mbstowcs_chk_warn,
  107.                   (wchar_t *__restrict __dst,
  108.                    __const char *__restrict __src,
  109.                    size_t __len, size_t __dstlen), __mbstowcs_chk)
  110.      __warnattr ("mbstowcs called with dst buffer smaller than len "
  111.          "* sizeof (wchar_t)");
  112.  
  113. __extern_always_inline size_t
  114. __NTH (mbstowcs (wchar_t *__restrict __dst, __const char *__restrict __src,
  115.          size_t __len))
  116. {
  117.   if (__bos (__dst) != (size_t) -1)
  118.     {
  119.       if (!__builtin_constant_p (__len))
  120.     return __mbstowcs_chk (__dst, __src, __len,
  121.                    __bos (__dst) / sizeof (wchar_t));
  122.  
  123.       if (__len > __bos (__dst) / sizeof (wchar_t))
  124.     return __mbstowcs_chk_warn (__dst, __src, __len,
  125.                      __bos (__dst) / sizeof (wchar_t));
  126.     }
  127.   return __mbstowcs_alias (__dst, __src, __len);
  128. }
  129.  
  130.  
  131. extern size_t __wcstombs_chk (char *__restrict __dst,
  132.                   __const wchar_t *__restrict __src,
  133.                   size_t __len, size_t __dstlen) __THROW;
  134. extern size_t __REDIRECT_NTH (__wcstombs_alias,
  135.                   (char *__restrict __dst,
  136.                    __const wchar_t *__restrict __src,
  137.                    size_t __len), wcstombs);
  138. extern size_t __REDIRECT_NTH (__wcstombs_chk_warn,
  139.                   (char *__restrict __dst,
  140.                    __const wchar_t *__restrict __src,
  141.                    size_t __len, size_t __dstlen), __wcstombs_chk)
  142.      __warnattr ("wcstombs called with dst buffer smaller than len");
  143.  
  144. __extern_always_inline size_t
  145. __NTH (wcstombs (char *__restrict __dst, __const wchar_t *__restrict __src,
  146.          size_t __len))
  147. {
  148.   if (__bos (__dst) != (size_t) -1)
  149.     {
  150.       if (!__builtin_constant_p (__len))
  151.     return __wcstombs_chk (__dst, __src, __len, __bos (__dst));
  152.       if (__len > __bos (__dst))
  153.     return __wcstombs_chk_warn (__dst, __src, __len, __bos (__dst));
  154.     }
  155.   return __wcstombs_alias (__dst, __src, __len);
  156. }
  157.